package model;

import java.util.*;

/**
 * Classe che incapsula e modella le informazioni associate ad waypoint. Con waypoint
 * intendiamo un qualsiasi punto geografico, localizzato su mappa da latitudine e 
 * longitudine, che risulti essere d'interesse per l'applicazione. In particolare 
 * sono stati implementati metodi per operare su info legate ai punti d'interesse quali 
 * l'identificativo dello stesso, la latitudine e la longitudine. Inoltre si tiene riferimento 
 * ad una lista di post-it associata ad un waypoint.
 * 
 * @author Gruppo Capo, De Notaris, Pastore e Vento
 * @since Luglio 2011
 */
public class Waypoint {

	// Attributi di classe
	private int id;
	private double latitude;
	private double longitude;
	private List<PostIt> postIt;
	
	/**
	 * Costruttore che imposta gli attributi di un punto d'interesse ai valori di default.
	 * In particolare, imposterà l'identificativo del punto a -1 e le coordinate geografiche
	 * a 0; istanzierà una lista di post-it inizialmente vuota.
	 */
	public Waypoint() {
		super();
		this.id = -1;
		this.latitude = 0;
		this.longitude = 0;
		postIt=new ArrayList<PostIt>();
	}
	
	/**
	 * Costruttore che imposta gli attributi di un punto d'interesse ai valori passati in ingresso.
	 *
	 * @param id identificativo del punto d'interesse, sarà univoco nell'applicazione
	 * @param lat latitudine del punto d'interesse
	 * @param longit longitudine del punto d'interesse
	 */
	public Waypoint(int id,double lat, double longit) {
		super();
		this.id = id;
		this.latitude = lat;
		this.longitude = longit;
		postIt=new ArrayList<PostIt>();
	}
	
	/**
	 * Metodo che restituisce la lista dei post-it associati al punto d'interesse
	 * @return List<PostIt> lista di post-it
	 * @see model.PostIt
	 */
	public List<PostIt> getPostIt() {
		return postIt;
	}
	
	/**
	 * Metodo che imposta la lista dei post-it associati al punto d'interesse 
	 * @param postIt lista di post-it associati al punto d'interesse
	 * @see model.PostIt
	 */
	public void setPostIt(List<PostIt> postIt) {
		this.postIt = postIt;
	}
	
	/**
	 * Metodo che restituisce l'identificativo del punto d'interesse 
	 * @return int identificativo univoco punto d'interesse
	 */
	public int getId() {
		return id;
	}
	
	/**
	 * Metodo che imposta l'identificativo del punto d'interesse a quello passata come parametro
	 * @param id identificativo univoco del punto d'interesse
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * Metodo che restituisce la latitudine associata al post-it
	 * @return double latitudine del punto d'interesse
	 */
	public double getLat() {
		return latitude;
	}
	
	/**
	 * Metodo che imposta la latitudine del punto d'interesse a quella passata come parametro
	 * @param lat longitudine del punto d'interesse
	 */
	public void setLat(double lat) {
		this.latitude = lat;
	}
	
	/**
	 * Metodo che restituisce la longitudine associata al post-it
	 * @return double longitudine del punto d'interesse
	 */
	public double getLongit() {
		return longitude;
	}
	
	/**
	 * Metodo che imposta la logitudine del punto d'interesse a quella passata come parametro
	 * @param longit longitudine del punto d'interesse
	 */
	public void setLongit(double longit) {
		this.longitude = longit;
	}
	
	/**
	 * Metodo che restituisce come stringa le informazioni associate ad un punto d'interesse
	 * per l'applicazione
	 * 
	 * @return informazioni associate al punto d'interesse
	 */ 
    @Override
    public String toString(){
    	return "id:"+getId()+" latitude:"+getLat()+" longitude:"+getLongit();
    }

}
